//class Solution {
//    public int removeElement(int[] nums, int val) {
//        int i=0,j=-1;
//        while (i<nums.length){
//            if(nums[i] != val){
//                j++;
//                nums[j] = nums[i];
//            }
//            i++;
//        }
//        return j+1;
//    }
//}


//二刷
class Solution {
    public int removeElement(int[] nums, int val) {
        int l = nums.length - 1;
        //初始：l、r指向最后一个非val位置
        //l向前遍历，
        //  当找到一个val时，
        //      交换l和r元素，并r向前移动到下一个非val位置
        //  l前向遍历，直至l=0-1；返回 （r+1）

        while (l>=0 && nums[l] == val){
            l--;
        }
        int r = l;
        l = l -1;
        while (l>=0){
            if (nums[l] == val){
                nums[l] = nums[r];
                l--;
                r--;
            }
            else l--;
        }
        return r+1;
    }
}